//8.enum枚举类型  
//枚举是一种数据结构，
//使用枚举我们可以定义一些带名字的“常量”，清晰地表达意图或创建一组有区别的用例。 TS支持数字（默认）的和字符串的枚举
// 枚举 就是用 可以表达的数据名称 来表示一些选项常量.
// 比如 性别: 男0  女1  未知2 真正存储到数据库或程序里面的时一般不会用字符串来表示
// 为什么？ 因为字符串占用内存空间比较大 数字占用空间比较小
// 比如 let LilyGender="女" //utf8 3byte  用数字 let LilyGender=1; 1byte 特别是数据库 tinyint
// 这种选项式的值 用枚举存储，如果直接用数字存  ，在阅读代码的时候不好理解 所以用枚举.

//默认情况下 枚举里面存储的值 从0开始递增的数字
enum Gender {Male,Female,Unno}
// let LilyGender=1;//在查看代码 阅读代码不好理解.
let LilyGender=Gender.Female; //1
let TomGender=Gender.Male;//0
let NobodyGender=Gender.Unno;//2
let genderValue=Gender[1];//Female
//枚举最终转化成js长什么样子？？？ 就是把枚举编程js里面对象 并给对象做一个值的“映射”..
// var Gender;
// (function (Gender) {
//     Gender[Gender["Male"] = 0] = "Male"; // Gender["Male"]=0; Gender[0]="Male";
//     Gender[Gender["Female"] = 1] = "Female";// Gender["Female"]=1; Gender[1]="Female";
//     Gender[Gender["Unno"] = 2] = "Unno";// Gender["Unno"]=2; Gender[2]="Unno";
// })(Gender || (Gender = {}));

//比如朋友圈 对我是否开放 open开放  close 不开放
enum isFriendOpen {Close,Open} // 0  1 经验 技巧  true  false 1bit 0 1
let tome=isFriendOpen.Open; 

//枚举默认值是 0开始递增 枚举也可以指定 存储的值  
// enum Days {Sun, Mon, Tue, Wed, Thu, Fri, Sat} // 0-6 就是星期几
enum Days {
    Sun="星期日", 
    Mon="星期一", 
    Tue="星期二", 
    Wed="星期三", 
    Thu="星期四", 
    Fri="星期五", 
    Sat="星期六"
} 
let strb="今天是"+Days.Wed;//获取 星期三

// my name is 张三  正则匹配中文. \u661F-\u4E09 unicode 编码  utf8 是unicode的一种 uft16 utf32